/**
 * @param {string} ransomNote
 * @param {string} magazine
 * @return {boolean}
 */

var canConstruct = function (ransomNote, magazine) {
    let map = new Map()
    let lenA = ransomNote.length
    let lenB = magazine.length
    // 将magazine所有的字符加入map 并计数
    for (let i = 0; i < lenB; i++) {
        // 如果哈希表中没有这个字符 则将其推入map
        if (!map.has(magazine[i])) {
            map.set(magazine[i], 1)
        } else {
            map.set(magazine[i], map.get(magazine[i]) + 1)
        }
    }
    // 检测
    for (let i = 0; i < lenA; i++) {
        // 如果有 则减去一个
        if (map.has(ransomNote[i])) {
            map.set(ransomNote[i], map.get(ransomNote[i]) - 1)
        }
        // 如果不存在 则直接返回false
        else {
            return false
        }
        // 如果存在 并且对应的value等于-1 说明多用了一个 则返回false
        if (map.has(ransomNote[i])) {
            if (map.get(ransomNote[i]) < 0) {
                return false
            }
        }
    }
    return true
};
canConstruct("aa", "aab")